import { Allow, IsBoolean, IsIn, IsNumber, IsOptional, IsString } from "class-validator";
import { MethodType, PermissionType } from "@/types";

export class PermissionDto {
  // 权限名称
  @IsString()
  permissionName: string;

  // 权限编码
  @IsString()
  permissionCode: string;

  // 权限描述
  @Allow()
  @IsOptional()
  permissionDesc?: string;

  // 权限类型
  @IsString()
  @IsIn(['MENU', 'ROUTE', 'BUTTON', 'API'], {
    message: '权限类型必须为MENU, ROUTE, BUTTON, API中的一种',
  })
  type: PermissionType;

  // 父级权限ID
  @IsNumber()
  @IsOptional()
  parentId?: number;

  // 请求路径
  @IsString()
  @IsOptional()
  path?: string;

  // 路由重定向
  @IsString()
  @IsOptional()
  redirect?: string;

  // 菜单Icon
  @IsString()
  @IsOptional()
  icon?: string;

  //关联组件
  @IsString()
  @IsOptional()
  component?: string;

  // 是否缓存
  @IsBoolean()
  @IsOptional()
  keepAlive?: boolean;

  // 是否展示
  @IsBoolean()
  @IsOptional()
  isShow?: boolean;

  // 是否为基础菜单
  @IsBoolean()
  @IsOptional()
  isBase?: boolean;

  // 请求方式
  @IsString()
  @IsOptional()
  method?: MethodType;

  // 排序
  @IsNumber()
  @IsOptional()
  sort?: number;

  @IsBoolean()
  @IsOptional()
  status?: boolean;
}